package com.zhu.instructions.loads;
import com.zhu.instructions.base.NoOperandsInstruction;
import com.zhu.rtda.Frame;


/**
 * ILOAD_0 指令：加载索引为 0 的 int 类型局部变量
 *
 * 作用：
 *   从当前帧的局部变量表中，读取索引 0 位置的 int 值，
 *   并将其推入当前帧的操作数栈顶。
 *
 * 典型用途：
 *   - 实例方法中加载 'this' 引用后的第一个 int 参数
 *   - 或直接是第一个本地 int 变量
 *
 * 执行过程：
 *   1. 固定索引：0
 *   2. 从局部变量表获取：localVars[0] → int value
 *   3. 将该 int 值压入操作数栈
 *
 * 栈变化：
 *   操作前：[...]
 *   操作后：[..., value]
 */
public class ILOAD_0 extends NoOperandsInstruction {

    @Override
    public void execute(Frame frame) {
        // Step 1: 从局部变量表索引 0 处读取 int 值
        int val = frame.getLocalVars().getInt(0);

        // Step 2: 将该 int 值推入操作数栈顶
        frame.getOperandStack().pushInt(val);
    }

    @Override
    public String toString() {
        return "iload_0";
    }
}
